home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2007 January, February, March & April
/
Chip-Cover-CD-2007-02.iso
/
Pakiet bezpieczenstwa
/
mini Pentoo LiveCD 2006.1
/
mpentoo-2006.1.iso
/
livecd.squashfs
/
usr
/
include
/
ewl
/
ewl_text.h
< prev
next >
Wrap
C/C++ Source or Header
|
2006-01-09
|
13KB
|
368 lines
#ifndef __EWL_TEXT__
#define __EWL_TEXT__
/**
* @file ewl_text.h
* @defgroup Ewl_Text text: A text layout widget
* @brief Defines a class for text layout and formatting
*
* @{
*/
/**
* @themekey /text/file
* @themekey /text/group
* @themekey /text/font
* @themekey /text/font_size
* @themekey /text/color/r
* @themekey /text/color/g
* @themekey /text/color/b
* @themekey /text/color/a
*/
/**
* @def EWL_TEXT(text)
* Typecasts a pointer to an Ewl_Text pointer.
*/
#define EWL_TEXT(x) ((Ewl_Text *)x)
typedef struct Ewl_Text_Tree Ewl_Text_Tree;
typedef struct Ewl_Text_Context Ewl_Text_Context;
typedef struct Ewl_Text_Trigger Ewl_Text_Trigger;
/**
* Provides for layout of text as well as formatting portions of the text in
* different ways.
*/
typedef struct Ewl_Text Ewl_Text;
/**
* @struct Ewl_Text
* Inherits from the Ewl_Container class and extends it to provide text layout
* and formatting
*/
struct Ewl_Text
{
Ewl_Container container; /**< Inherit from Ewl_Container */
Evas_Object *textblock; /**< The Evas_Object_Textblock */
char *text; /**< The text itself */
unsigned int length; /**< The length of the text */
unsigned int total_size; /**< The total size we've alloc'd for text */
unsigned int cursor_position; /**< The cursor position */
struct
{
Ewl_Text_Tree *tree; /**< The formatting tree */
Ewl_Text_Tree *current; /**< The current formatting node */
} formatting;
Ecore_List *triggers; /**< The list of triggers */
Ewl_Text_Trigger *selection; /**< The current selection */
unsigned char delete_count; /**< Number of deletes */
unsigned char in_select; /**< Are we in select mode? */
unsigned char selectable; /**< Is the text selectable? */
unsigned char dirty; /**< Does the text need layout? */
};
Ewl_Widget *ewl_text_new(void);
int ewl_text_init(Ewl_Text *t);
unsigned int ewl_text_length_get(Ewl_Text *t);
void ewl_text_index_geometry_map(Ewl_Text *t, unsigned int idx,
int *x, int *y, int *w, int *h);
unsigned int ewl_text_coord_index_map(Ewl_Text *t, int x, int y);
char *ewl_text_text_get(Ewl_Text *t);
void ewl_text_text_set(Ewl_Text *t, const char *text);
void ewl_text_clear(Ewl_Text *t);
void ewl_text_text_prepend(Ewl_Text *t, const char *text);
void ewl_text_text_append(Ewl_Text *t, const char *text);
void ewl_text_text_insert(Ewl_Text *t, const char *text,
unsigned int idx);
void ewl_text_text_delete(Ewl_Text *t, unsigned int length);
void ewl_text_selectable_set(Ewl_Text *t, unsigned int selectable);
unsigned int ewl_text_selectable_get(Ewl_Text *t);
char *ewl_text_selection_text_get(Ewl_Text *t);
unsigned int ewl_text_has_selection(Ewl_Text *t);
Ewl_Text_Trigger *ewl_text_selection_get(Ewl_Text *t);
void ewl_text_cursor_position_set(Ewl_Text *t, unsigned int pos);
unsigned int ewl_text_cursor_position_get(Ewl_Text *t);
unsigned int ewl_text_cursor_position_line_up_get(Ewl_Text *t);
unsigned int ewl_text_cursor_position_line_down_get(Ewl_Text *t);
void ewl_text_font_set(Ewl_Text *t, const char *font);
void ewl_text_font_apply(Ewl_Text *t, const char *font,
unsigned int length);
char *ewl_text_font_get(Ewl_Text *t, unsigned int idx);
void ewl_text_font_size_set(Ewl_Text *t, unsigned int size);
void ewl_text_font_size_apply(Ewl_Text *t, unsigned int size,
unsigned int length);
unsigned int ewl_text_font_size_get(Ewl_Text *t, unsigned int idx);
void ewl_text_color_set(Ewl_Text *t, unsigned int r, unsigned int g,
unsigned int b, unsigned int a);
void ewl_text_color_apply(Ewl_Text *t, unsigned int r, unsigned int g,
unsigned int b, unsigned int a,
unsigned int length);
void ewl_text_color_get(Ewl_Text *t, unsigned int *r, unsigned int *g,
unsigned int *b, unsigned int *a,
unsigned int idx);
void ewl_text_align_set(Ewl_Text *t, unsigned int align);
void ewl_text_align_apply(Ewl_Text *t, unsigned int align,
unsigned int length);
unsigned int ewl_text_align_get(Ewl_Text *t, unsigned int idx);
void ewl_text_styles_set(Ewl_Text *t, unsigned int styles);
void ewl_text_styles_apply(Ewl_Text *t, unsigned int styles,
unsigned int length);
unsigned int ewl_text_styles_get(Ewl_Text *t, unsigned int idx);
void ewl_text_style_add(Ewl_Text *t, Ewl_Text_Style sytle,
unsigned int length);
void ewl_text_style_del(Ewl_Text *t, Ewl_Text_Style style,
unsigned int length);
void ewl_text_style_invert(Ewl_Text *t, Ewl_Text_Style style,
unsigned int length);
unsigned int ewl_text_style_has(Ewl_Text *t, Ewl_Text_Style style,
unsigned int idx);
void ewl_text_wrap_set(Ewl_Text *t, unsigned int wrap);
void ewl_text_wrap_apply(Ewl_Text *t, unsigned int wrap,
unsigned int length);
unsigned int ewl_text_wrap_get(Ewl_Text *t, unsigned int idx);
void ewl_text_bg_color_set(Ewl_Text *t, unsigned int r, unsigned int g,
unsigned int b, unsigned int a);
void ewl_text_bg_color_apply(Ewl_Text *t, unsigned int r, unsigned int g,
unsigned int b, unsigned int a,
unsigned int length);
void ewl_text_bg_color_get(Ewl_Text *t, unsigned int *r, unsigned int *g,
unsigned int *b, unsigned int *a,
unsigned int idx);
void ewl_text_glow_color_set(Ewl_Text *t, unsigned int r, unsigned int g,
unsigned int b, unsigned int a);
void ewl_text_glow_color_apply(Ewl_Text *t, unsigned int r, unsigned int g,
unsigned int b, unsigned int a,
unsigned int length);
void ewl_text_glow_color_get(Ewl_Text *t, unsigned int *r, unsigned int *g,
unsigned int *b, unsigned int *a,
unsigned int idx);
void ewl_text_outline_color_set(Ewl_Text *t, unsigned int r, unsigned int g,
unsigned int b, unsigned int a);
void ewl_text_outline_color_apply(Ewl_Text *t, unsigned int r, unsigned int g,
unsigned int b, unsigned int a,
unsigned int length);
void ewl_text_outline_color_get(Ewl_Text *t, unsigned int *r, unsigned int *g,
unsigned int *b, unsigned int *a,
unsigned int idx);
void ewl_text_shadow_color_set(Ewl_Text *t, unsigned int r, unsigned int g,
unsigned int b, unsigned int a);
void ewl_text_shadow_color_apply(Ewl_Text *t, unsigned int r, unsigned int g,
unsigned int b, unsigned int a,
unsigned int length);
void ewl_text_shadow_color_get(Ewl_Text *t, unsigned int *r, unsigned int *g,
unsigned int *b, unsigned int *a,
unsigned int idx);
void ewl_text_strikethrough_color_set(Ewl_Text *t, unsigned int r, unsigned int g,
unsigned int b, unsigned int a);
void ewl_text_strikethrough_color_apply(Ewl_Text *t, unsigned int r, unsigned int g,
unsigned int b, unsigned int a,
unsigned int length);
void ewl_text_strikethrough_color_get(Ewl_Text *t, unsigned int *r, unsigned int *g,
unsigned int *b, unsigned int *a,
unsigned int idx);
void ewl_text_underline_color_set(Ewl_Text *t, unsigned int r, unsigned int g,
unsigned int b, unsigned int a);
void ewl_text_underline_color_apply(Ewl_Text *t, unsigned int r, unsigned int g,
unsigned int b, unsigned int a,
unsigned int length);
void ewl_text_underline_color_get(Ewl_Text *t, unsigned int *r, unsigned int *g,
unsigned int *b, unsigned int *a,
unsigned int idx);
void ewl_text_double_underline_color_set(Ewl_Text *t, unsigned int r, unsigned int g,
unsigned int b, unsigned int a);
void ewl_text_double_underline_color_apply(Ewl_Text *t, unsigned int r, unsigned int g,
unsigned int b, unsigned int a,
unsigned int length);
void ewl_text_double_underline_color_get(Ewl_Text *t, unsigned int *r, unsigned int *g,
unsigned int *b, unsigned int *a,
unsigned int idx);
/*
* Trigger stuf
*/
struct Ewl_Text_Trigger
{
Ewl_Widget widget; /**< Inherit from widget */
Ewl_Text_Trigger_Type type; /**< Trigger type */
unsigned int pos; /**< Trigger start position */
unsigned int len; /**< Trigger length */
unsigned int base; /**< Used for the selection. Start position */
Ewl_Text *text_parent; /**< The parent text area */
Ecore_List *areas; /**< The list of objects making up the trigger */
};
#define EWL_TEXT_TRIGGER(trigger) ((Ewl_Text_Trigger *) trigger)
Ewl_Text_Trigger *ewl_text_trigger_new(Ewl_Text_Trigger_Type type);
int ewl_text_trigger_init(Ewl_Text_Trigger *trigger,
Ewl_Text_Trigger_Type type);
Ewl_Text_Trigger_Type ewl_text_trigger_type_get(Ewl_Text_Trigger *t);
void ewl_text_trigger_start_pos_set(Ewl_Text_Trigger *t,
unsigned int pos);
unsigned int ewl_text_trigger_start_pos_get(Ewl_Text_Trigger *t);
void ewl_text_trigger_base_set(Ewl_Text_Trigger *t,
unsigned int pos);
unsigned int ewl_text_trigger_base_get(Ewl_Text_Trigger *t);
void ewl_text_trigger_length_set(Ewl_Text_Trigger *t,
unsigned int len);
unsigned int ewl_text_trigger_length_get(Ewl_Text_Trigger *t);
/*
* Internal stuff
*/
void ewl_text_triggers_configure(Ewl_Text *t);
void ewl_text_triggers_realize(Ewl_Text *t);
void ewl_text_triggers_unrealize(Ewl_Text *t);
void ewl_text_triggers_show(Ewl_Text *t);
void ewl_text_triggers_hide(Ewl_Text *t);
void ewl_text_cb_configure(Ewl_Widget *w, void *ev, void *data);
void ewl_text_cb_reveal(Ewl_Widget *w, void *ev, void *data);
void ewl_text_cb_obscure(Ewl_Widget *w, void *ev, void *data);
void ewl_text_cb_show(Ewl_Widget *w, void *ev, void *data);
void ewl_text_cb_hide(Ewl_Widget *w, void *ev, void *data);
void ewl_text_cb_destroy(Ewl_Widget *w, void *ev, void *data);
void ewl_text_cb_mouse_down(Ewl_Widget *w, void *ev, void *data);
void ewl_text_cb_mouse_up(Ewl_Widget *w, void *ev, void *data);
void ewl_text_cb_mouse_move(Ewl_Widget *w, void *ev, void *data);
void ewl_text_cb_resize(Ewl_Widget *w, void *ev, void *data);
void ewl_text_cb_child_add(Ewl_Container *c, Ewl_Widget *w);
void ewl_text_cb_child_del(Ewl_Container *c, Ewl_Widget *w);
void ewl_text_trigger_cb_destroy(Ewl_Widget *w, void *ev, void *data);
void ewl_text_trigger_cb_mouse_in(Ewl_Widget *w, void *ev, void *data);
void ewl_text_trigger_cb_mouse_out(Ewl_Widget *w, void *ev, void *data);
void ewl_text_trigger_cb_mouse_up(Ewl_Widget *w, void *ev, void *data);
void ewl_text_trigger_cb_mouse_down(Ewl_Widget *w, void *ev, void *data);
/*
* Ewl_Text_Context stuff
*/
struct Ewl_Text_Context
{
char *font;
unsigned int styles;
unsigned int align;
unsigned int wrap;
char size;
Ewl_Color_Set color;
struct
{
Ewl_Color_Set bg;
Ewl_Color_Set glow;
Ewl_Color_Set outline;
Ewl_Color_Set shadow;
Ewl_Color_Set strikethrough;
Ewl_Color_Set underline;
Ewl_Color_Set double_underline;
} style_colors;
unsigned int ref_count;
};
void ewl_text_context_init(void);
void ewl_text_context_shutdown(void);
Ewl_Text_Context *ewl_text_context_new(void);
void ewl_text_context_acquire(Ewl_Text_Context *tx);
void ewl_text_context_release(Ewl_Text_Context *tx);
int ewl_text_context_compare(Ewl_Text_Context *a, Ewl_Text_Context *b);
Ewl_Text_Context *ewl_text_context_dup(Ewl_Text_Context *old);
/*
* Ewl_Text_Tree stuff
*/
struct Ewl_Text_Tree
{
Ewl_Text_Tree *parent;
unsigned int length;
Ecore_List *children;
Ewl_Text_Context *tx;
};
Ewl_Text_Tree *ewl_text_tree_new(void);
void ewl_text_tree_free(Ewl_Text_Tree *tree);
void ewl_text_tree_condense(Ewl_Text_Tree *tree);
void ewl_text_tree_dump(Ewl_Text_Tree *tree, const char *indent);
Ewl_Text_Tree *ewl_text_tree_node_get(Ewl_Text_Tree *tree, unsigned int idx,
unsigned int inclusive);
void ewl_text_tree_current_node_set(Ewl_Text *t, Ewl_Text_Tree *current);
void ewl_text_tree_insert(Ewl_Text *t, unsigned int idx, unsigned int len);
void ewl_text_tree_delete(Ewl_Text *t, unsigned int idx, unsigned int len);
Ewl_Text_Context *ewl_text_tree_context_get(Ewl_Text_Tree *tree,
unsigned int idx);
void ewl_text_tree_context_set(Ewl_Text *t, unsigned int context_mask,
Ewl_Text_Context *tx);
void ewl_text_tree_context_apply(Ewl_Text *t, unsigned int context_mask,
Ewl_Text_Context *tx, unsigned int idx,
unsigned int len);
void ewl_text_tree_context_style_apply(Ewl_Text *t, Ewl_Text_Style style,
unsigned int idx, unsigned int len,
unsigned int invert);
void ewl_text_tree_context_style_remove(Ewl_Text *t, Ewl_Text_Style style,
unsigned int idx, unsigned int len);
/*
* Ewl_Text_Trigger_Area stuff
*/
typedef struct Ewl_Text_Trigger_Area Ewl_Text_Trigger_Area;
#define EWL_TEXT_TRIGGER_AREA(area) ((Ewl_Text_Trigger_Area *) area)
struct Ewl_Text_Trigger_Area
{
Ewl_Widget widget;
unsigned int deleted;
};
Ewl_Widget *ewl_text_trigger_area_new(Ewl_Text_Trigger_Type type);
int ewl_text_trigger_area_init(Ewl_Text_Trigger_Area *area,
Ewl_Text_Trigger_Type type);
/**
* @}
*/
#endif /* __EWL_TEXT_H__ */